package com.cx.bank.manager;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;

import com.cx.bank.model.MoneyBean;
import com.cx.bank.util.MD5Util;
/**
 * 业务层
 * 业务层实现
 * @return null
 * */
public class ManagerImpl implements ManagerInterface{
	/**注册
	 * @param filepath 文件目录
	 * @param f 文件 
	 * @param pps Properties实例
	 * */
	MoneyBean moneybean=null;
	MD5Util md5=null;
	@Override
	public boolean register(String name,String password){
		// TODO Auto-generated method stub
		md5=new MD5Util();
		int cardNumber=0;
		String money="0.0";
		String filepath="F:\\my project(java)\\BankProject\\"+name+".properties";//文件目录
		File f=new File(filepath);
		if(!f.exists()){//如果文件不存在，新建properties型文件
			try {
				f.createNewFile();//创建
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else{
			System.out.println("文件存在");
		}
		Properties pps = new Properties();
		InputStream in=null;
		try {
			in = new FileInputStream(filepath);
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		//从输入流中读取属性列表（键和元素对） 
		try {
			pps.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。  
		//强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
		OutputStream out=null;
		try {
			out = new FileOutputStream(filepath);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//随机生成卡号
		Random random=new Random();
		cardNumber=random.nextInt(99999999)*10000000;
		/*pps.setProperty("password", md5.encode(password.getBytes()));
		pps.setProperty("name",md5.encode(name.getBytes()) );
		pps.setProperty("card", md5.encode((String.valueOf(cardNumber)).getBytes()));
		pps.setProperty("money", md5.encode(money.getBytes()));*/
		pps.setProperty("password",password);
		pps.setProperty("name",name);
		pps.setProperty("card",String.valueOf(cardNumber));
		pps.setProperty("money", money);
		//以适合使用 load 方法加载到 Properties 表中的格式，  
		//将此 Properties 表中的属性列表（键和元素对）写入输出流  
		try {
			pps.store(out,name);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("注册成功！您的卡号是"+cardNumber);
		
		return true;
	}
	/**登录
	 * @param name 用户名
	 * @param password 密码
	 * */
	@Override
	public boolean login(String name, String password) {
		// TODO Auto-generated method stub
		int i=0;
		String arr[]=new String[3];//存属性
		String filepath="F:\\my project(java)\\BankProject\\"+name+".properties";
		Properties pps = new Properties();
		InputStream in=null;
		try {
			in = new BufferedInputStream(new FileInputStream(filepath));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			pps.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Enumeration en = pps.propertyNames(); //得到配置文件的名字
		while(en.hasMoreElements()) {
			String strKey = (String) en.nextElement();
			if(strKey.equals("name")){
				arr[0]=pps.getProperty(strKey);
			}else if(strKey.equals("password")){
				arr[1]=pps.getProperty(strKey);
			}else{
				arr[i]=pps.getProperty(strKey);
			}
			i++;
		}
		if(arr[1].equals(password)&&arr[0].equals(name)){
			return false;
		}else{
			System.out.println("用户名不存在，请注册！");
			return true;
		}
	}
	@Override
	/**存款
	 * @param name 用户名
	 * @param password 密码
	 */
	public void deposit(String name,double money) {
		// TODO Auto-generated method stub
		moneybean=new MoneyBean();
		moneybean.setMoney(name, money);
	}
	@Override
	/**取款
	 * @param name 用户名
	 * @param money 余额
	 */
	public void withdrawals(String name,double money) {
		// TODO Auto-generated method stub
		moneybean=new MoneyBean();
		moneybean.setMoney(name, money);
	}
	@Override
	//查询余额
	public void inquary(String name) {
		// TODO Auto-generated method stub
		moneybean=new MoneyBean();
		System.out.println(moneybean.getMoney(name));
	}
	@Override
	//转账
	public void transfer(String self,String other,double money) {
		// TODO Auto-generated method stub
		moneybean=new MoneyBean();
		moneybean.setMoney(self, -money);
		moneybean.setMoney(other, money);
		System.out.println("转账成功！");
	}
	@Override
	//退出系统
	public boolean exitSystem() {
		// TODO Auto-generated method stub
		System.exit(-1);
		return true;
	}
}
